﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Win32;
using System.Reflection;
using System.Windows.Forms;
using System.IO;
using System.Deployment.Application;

namespace ScarecrowLibrary
{
    /// <summary>
    /// Permette all'applicazione corrente di essere eseguita all'avvio di Windows
    /// </summary>
    public static class scApplicationAutostarter
    {

        /// <summary>
        /// Percorso del registro.
        /// </summary>
        private const string RUN_LOCATION = @"Software\Microsoft\Windows\CurrentVersion\Run";

        /// <summary>
        /// Aggiunge l'applicazione corrente alla lista delle applicazioni da eseguire all'avvio di Windows
        /// Permette l'utilizzo della tecnologia ClickOnce .
        /// </summary>
        /// <param name="productName">Nome dell'applicazione.</param>
        /// <param name="publisherName">Nome del produttore.</param>
        /// <param name="args">Argomenti da passare all'applicazione.</param>
        public static bool SetAutoStart(string productName, string publisherName, string[] args)
        {
            bool result = true;
            try
            {
                //ricavo una unica stringa dagli argomenti, inserendo uno spazio tra loro
                string argouments = string.Join(" ", args);

                //Ricavo la chiave di registro da settare
                RegistryKey key = Registry.CurrentUser.CreateSubKey(RUN_LOCATION);

                string allProgramsPath = Environment.GetFolderPath(Environment.SpecialFolder.Programs);

                string shortcutPath = Path.Combine(allProgramsPath, publisherName);

                shortcutPath = Path.Combine(shortcutPath, productName) + ".appref-ms";

                //Setto la chiave di registro
                key.SetValue(productName, string.Format("{0} {1}", shortcutPath, argouments));
            }
            catch
            {
                result = false;
            }
            return result;
        }

        /// <summary>
        /// Rimuove l'applicazione corrente dalla lista delle applicazioni da eseguire all'avvio di Windows
        /// </summary>
        public static bool UnSetAutoStart(string productName)
        {
            bool result = true;
            try
            {
                //Se il programma parte all'avvio
                //Determino la chiave di registro
                RegistryKey key = Registry.CurrentUser.CreateSubKey(RUN_LOCATION);
                //La elimino
                key.DeleteValue(productName);
            }
            catch
            {
                result = false;
            }
            return result;
        }
    }
}
